package com.urbane.product.dto;

import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.util.List;

/**
 * 商品搜索请求 DTO
 * 功能：
 *   - 前端提交搜索条件：关键词、价格区间、品牌、类目、排序方式等
 *   - 用于 ProductService.search() 方法
 *
 * 注意：
 *   - 所有参数均为可选，允许空值
 *   - 支持分页（page=1, size=20）
 *   - 支持多条件组合筛选
 */
@Data
public class ProductSearchRequest {

    // 全文搜索关键词
    private String keyword;

    // 价格区间
    @Min(value = 0, message = "最低价格不能为负数")
    private Double minPrice;

    @Min(value = 0, message = "最高价格不能为负数")
    private Double maxPrice;

    // 品牌筛选（多个品牌）
    private List<String> brands;

    // 类目筛选（如 "数码/手机"）
    private String categoryPath;

    // 属性筛选：{"color": "深空灰", "storage": "128GB"}
    private String attributes; // JSON 字符串，如 {"color":"深空灰","network":"5G"}

    // 是否仅显示有货商品
    private Boolean onlyInStock = false;

    // 排序方式
    private String sortBy = "relevance"; // relevance / price_asc / price_desc / sales_desc / rating_desc

    // 分页
    @NotNull(message = "页码不能为空")
    @Min(value = 1, message = "页码必须大于等于1")
    private Integer page = 1;

    @NotNull(message = "每页数量不能为空")
    @Min(value = 1, message = "每页数量必须大于等于1")
    @Max(value = 100, message = "每页数量不能超过100")
    private Integer size = 20;

    // ========== 构造函数 ==========
    public ProductSearchRequest() {}
}